// 配置axios的全局全局路径 连接后端接口了
axios.defaults.baseURL = "http://localhost:8080/"
// 配置Vue的全局属性 在任意组件内可以使用this.$http获取axios对象
Vue.prototype.$http = axios;

//======================================= axios的前置拦截器 ===========================================
// 每次发送axios请求前都会经过前置拦截器
axios.interceptors.request.use(res => {
    let token = localStorage.getItem("token"); // 获取token
    if(token){
        // 如果有token 在请求头中设置一个 token: 值为localStorage中的token的值
        res.headers["token"] = token;
    }
    return res;
},error => {
    Promise.reject(error)
})
//======================================= axios的前置拦截器 ===========================================

//======================================= axios的后置拦截器 ===========================================
// 发送axios请求之后都会经过
axios.interceptors.response.use(res => { // res - {"success":false, "message":noLogin}
    if (false === res.data.success && "noLogin" === res.data.message) {
        // 后端响应的是没有登录的信息 或者已经过期
        // 删除掉localStorage中的数据 - 保险起见
        localStorage.removeItem("token");
        localStorage.removeItem("logininfo");
        location.href = '/index.html'
    }
    return res;
},error => {
    Promise.reject(error)
})
//======================================= axios的后置拦截器 ===========================================

//======================================= 静态资源拦截器 =========================
var url = location.href
// 如果访问的不是 login.html 并且 register.html 且 index 且 callback 且 binder
if (url.indexOf("/login.html") === -1 && url.indexOf("/register.html") === -1
    && url.indexOf("/index.html") === -1 && url.indexOf("/callback.html") === -1
    && url.indexOf("/binder.html") === -1)
{
    // 获取登录信息
    var logininfo = localStorage.getItem("logininfo");
    if (!logininfo) {
        // 如果没有跳转登录界面
        location.href = "/login.html"
    }
}

//========================================== 公共方法 ===============================================

//将地址栏？后面的参数装成json对象 - 以后这样的需求很多
function param2JsonObj(url){
    //截取？后面的参数
    var params = url.substring(url.indexOf("?")+1);
    //按照&进行分割 - 获取每一对参数
    var paraArr = params.split("&");//[code=0314GMkl225Gj94lpBnl2BpYxh14GMk6,state=STATE]
    var obj = {};
    for(var i = 0;i<paraArr.length;i++){
        //获取单个参数
        var para = paraArr[i];
        //获取参数名
        var parakey = para.split("=")[0];
        //获取参数值
        var paraValue = para.split("=")[1];
        obj[parakey] = paraValue;
    }
    return obj;
}